import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.odps.udf.UDF;

/**
 * 解析药监局页面 获取卫生化学标签
 * 
 * @author asus
 *
 */
public class SpliderHeathChemistryTarget extends UDF {
	/*
	 * public static void main(String[] args) { String html = TestHtml.html();
	 * evaluate(html); }
	 */

	public List<String> evaluate(String html,String goodsId) {

		List<String> list = new ArrayList<String>();
		try {
			// 传进来的html就是卫生化学指标的下的tr标签
			//String html = TestHtml.html();
			if (StringUtils.isNotBlank(html) && StringUtils.isNotBlank(goodsId)) {
				Document doc = Jsoup.parse(html);

				// 获取到卫生化学指标 表名的下一行
				Elements eles1 = doc.select("tr:contains(卫生化学指标)+tr");
				System.out.println(eles1.size());
				if (null != eles1 && eles1.size() == 1) {
					Elements elementsByTag = eles1.get(0).getElementsByTag("tbody");
					Elements trEles = elementsByTag.get(0).getElementsByTag("tr");

					for (int i = 1; i < trEles.size(); i++) {
						Element tableNames = trEles.get(0);// 获取第一行所有表名
						System.out.println(trEles.get(0).text());
						// 因为第一行是title表名 所以从第二行数据开始取
						Element trE = trEles.get(i);
						Elements tdEles = trE.getElementsByTag("td");
						for (int j = 1; j < tdEles.size(); j++) {
							// 获取每一行的每一列 每一行的第一列都是检验项目名称
							String itemName = tdEles.get(0).text();
							String target = tdEles.get(j).text();
							//由于页面爬取过程可能空格会变多 导致多出一行 所以需要判断一下 不为空的情况下存在集合
							if(StringUtils.isNotBlank(target)) {
								Map<String, Object> obj = new HashMap<String, Object>();
								obj.put("goodsId", goodsId);// 产品id
								//obj.put("approval", "564515456");// 备案号
								obj.put("itemName", itemName);// 检验项目名称
								obj.put("target", target);// 检验指标
								obj.put("tableIndex", j);// 表标签
								// 因为表名和检验项目名称都是一一对应
								String tableName = tableNames.getElementsByTag("td").get(j).text();
								obj.put("tableName", tableName);// 表名
								list.add(JSON.toJSONString(obj));
							}
						}

					}
				}

			}else if(StringUtils.isNotBlank(goodsId)) {
				Map<String, Object> obj = new HashMap<String, Object>();
				obj.put("goodsId", goodsId);
				list.add(JSON.toJSONString(obj));
			}

			System.out.println(JSON.toJSONString(list));
			return list;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			Map<String, Object> obj = new HashMap<String, Object>();
			obj.put("e", e.getMessage());
			list.add(JSON.toJSONString(obj));
			return list;
		}
	}
}
